package com.zbs.framework.common.utils;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.zbs.framework.common.config.OssConfig;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.UUID;

/**
 * @author 头都给你打歪
 * @date 2020/7/18 16:11
 */
public class AliOssUtil {

    /**
     * 上传头像到oss
     * @param multipartFile
     * @return
     */
    public static String uploadOss(MultipartFile multipartFile) throws IOException {
        ErrorAssert.isTrue(!multipartFile.isEmpty(),"上传文件不能为空");
        // Endpoint以杭州为例，其它Region请按实际情况填写。
        String endpoint = String.format("oss-cn-%s.aliyuncs.com", OssConfig.endpoint);
        // 云账号AccessKey有所有API访问权限，建议遵循阿里云安全最佳实践，创建并使用RAM子账号进行API访问或日常运维，请登录 https://ram.console.aliyun.com 创建。
        String accessKeyId = OssConfig.accessKeyId;
        String accessKeySecret = OssConfig.accessKeySecret;
        String bucketName = OssConfig.bucketName;
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        InputStream inputStream = multipartFile.getInputStream();
        //获取文件名
        String fileName = multipartFile.getOriginalFilename();
        //获取文件后缀名
        String fileNameSuffx = fileName.substring(fileName.lastIndexOf("."));
        fileName = getPreventDuplicationOfName();
        //将文件或者头像按日期分类 2020/07/20
        String dataPath = DateUtils.format(new Date(), DateUtils.FORMAT_DIY);
        fileName =dataPath+"/"+fileName+fileNameSuffx;
        ossClient.putObject(bucketName,fileName , inputStream);
        String url = "https://" + bucketName + "." + endpoint + "/" + fileName;
        ossClient.shutdown();
        return url;
    }

    private static String getPreventDuplicationOfName(){
        //时间戳
        String currentTimeMillis = String.valueOf(System.currentTimeMillis());
        //去除 ‘-’ 的 uuid
        String uuid = UUID.randomUUID().toString().replace("-", "");
        //防止文件重名 日期 + 时间戳 + UUID + 文件后缀名
        //最后拼接成 2020/07/20/1.jpg
        return currentTimeMillis + uuid;
    }
}
